ESPLORAZIONE DEI DATI

L' obbiettivo del progetto è quello di predire, utilizzando una variabile discreta binaria, se una persona abbia avuto o no un arresto cardiaco. Il dataset in esame contiene informazioni sugli arresti cardiaci di differenti persone.

La prima cosa da effettuare è caricare i dati in un dataframe Pandas visualizzandone una parte per capirne struttura e distribuzione.

SIGNIFICATO DELLE FEATURE

Il dataframe si compone di 12 colonne, ovvero:

La variabile binaria HeartDisease corrisponde all'incognita da scoprire, che assumerà valore 1 nel caso in cui il paziente sia affetto da una cardiopatia e 0 in alternativa.

Prima di procedere con la vera e propria analisi dei dati si controlla l'assenza di valori nulli e di duplicati all'interno del dataframe.

Per prima cosa si esplorano e visualizzano alcuni dati, tra cui:

Quindi il numero totale di pazienti su cui verrà effettuata la classificazione è 918.

Il numero totale di soggetti affetti da cardiopatia è 508.

Il numero totale di soggetti non affetti da cardiopatia è 410.

Per ottenere informazioni sulle features ( media, deviazione standard, distribuzione in termini di masssimi, minimi e percentili), si utilizza il metodo describe.

Dall'analisi dei dati si evince che circa il 55% dei 918 pazienti presi in considerazione è affetto da cardiopatie. Ora visualizziamo in un grafico a torta il numero di pazienti affetti da cardiopatia(parte arancione) e quelli che invece non ne sono affetti(parte in blu).

DATA EXPLORATION

Per prima cosa visualizziamo in un istogramma i pazienti affetti o no da cardiopatia per vederne la distribuzione.

Si visualizzano ora le distribuzioni delle variabili continue del dataset.

Dall' analisi dei vari istogrammi emerge che la maggior parte dei pazienti analizzati ha un età compresa tra i 40 e i 50 anni ed è di sesso maschile con colesterolo compreso tra 200 e 300 e senza angina da esercizio.

Viene facile pensare che il parametro che influenzi maggiormente l'insorgere di cardiopatie sia l'età, anche se questa osservazione è errata.

Vediamo come, difatti, la media dell'età sia molto vicina.

Ora vediamo l'età media dei pazienti che invece non sono affetti da una qualsiasi cardiopatia.

Come emerso dalla precedente analisi si può osservare che l'insorgenza di una cardiopatia è strettamente legata ai seguenti parametri:

Partiamo ad analizzare Exercise angina. Per prima cosa bisogna convertire questa variabile categorica in una variabile numerica, dove se il paziente non è stato affetto da angina da esercizio la variabile assume valore 0 ed 1 in caso contrario.

Dal grafico si evince che i pazienti con una cardiopatia(quelli in arancione), soffrono in misura nettamente superiore di angina da esercizio(chiamata anche Angina da sforzo).

Le analisi appena fatte confermano quanto sospettato: si vede che la media dei pazienti che sono affetti da cardiopatie è più del triplo dei pazienti che non ne soffrono.

Passiamo ad osservare Oldpeak: quello che ci si aspetta che questo valore sia più alto nei pazienti affetti da cardiopatie.

La previsione era esatta: i pazienti affetti da cardiopatie(ovvero quelli in arancio), hanno valori di oldpeak più elevati rispetto a coloro che non ne sono affetti.

Infine analizziamo Sex,come fatto per Exercise Angina convertiamo la variabile categorica in una numerica dove lo 0 corrisponde all'uomo e l'1 alla donna:

Possiamo notare che i pazienti affetti da cardiopatie sono per lo più donne, difatti la media dei pazienti affetti da cardiopatie ci fa notare che vi è un'equa distribuzione tra donne e uomini.

Nel dizionario che segue viene associato un colore alle due classi in esame. I pazienti affetti da cardiopatie verranno rappresentati dal colore rosso, al contrario i restanri verranno rappresentati dal colore blu.

PREPROCESSING DEI DATI

In questa fase, partendo dai risultati dell'analisi precedente, effettuiamo una trasformazione dei dati in modo tale che siano pronti per essere elabrati dagli algoritmi di learning.

Nel dataset sono presenti delle variabili categoriche, essendo più facile lavorare con variabili numeriche, effettuiamo una trasformazione dei dati. Le variabili di tipo categoriche da processare sono:

In precedenza le variabili Sex e ExerciseAngina sono già state trasformate quindi è necessario solo concentrarsi sulle restanti.

STUDIO DATASET

Il set y rappresenta l'output, ovvero la sola feature HeartDisease, nel set x ci sono invece tutte le altre feature.

Definiamo ora i metodi per fare il training del modello e calcolare lo score.

Vengono utilizzati i dati divisi precedentemente, usando l'algoritmo Perceptron, per allineare un modello di classificazione. Il parametro class_weight permette di aumentare il peso degli errori nella classe con meno istanze. Come iperparametro alpha si è scelto quello che restituisce l'f1_measure maggiore.

Effettuo l'analisi su tutte le variabili presenti all'interno del dataframe.

L'analisi, a seguito di standardizzazione l1 con alpha=0.0001(che produce il miglior f1_score con perceptron), rivela che la feature più irrilevante è FastingBS. La più importante è invece ExerciseAngina seguita da Oldpeak e RestingBP.

Ora viene mostrata una heat map che utilizza la Correlazione di Pearson per verificare se esiste o meno una relazione significativa e positiva tra due variabili. Il metodo della Correlazione di Pearson assegna un valore tra -1 ed 1, dove 0 indica assenza di correlazione, 1 correlazione positiva e -1 correlazione negativa totale.

Non si evidenziano correlazioni significative.

Il seguente grafico mostra la distribuzione dei pazienti affetti da cardiopatie e non al variare delle feature più importanti, ovvero : ExerciseAngina, Oldpeak e RestingBP.

Si può osservare come i pazienti affetti da cardiopatie abbiano un Oldpeak più elevato e soffrano di Angina da Esercizio in quantità nettamente più elevata.

PARTE 3

In questa fase si confrontano i diversi modelli di classificazione per poi effettuare un confronto e capire quale è il migliore, ovvero il più efficiente.

La seguente funziona confronta il modello con i diversi iperparametri e ritorna il modello che ha restituito la f1_measure migliore.

Le seguenti funzioni verrranno usate per graficare i modelli, per ogni combinazione di features.

Di seguito viene definita una funzione che calcola tutti i dati utili per valutare un modello.

PERCEPTRON

Per iniziare verrà utilizzato il metodo seguente per acquisire la miglior combinazione di iperparametri per il metodo Perceptron. Viene utilizzato il parametro class_weight per aumentare il peso degli errori nella classe con meno istanze.

Ora definiamo il modello per Perceptron utilizzando i valori di iperparametri appena ottenuti.

Possiamo osservare che il valore più basso tra quelli ottenuti è la precisione relativa ai pazienti affetti realmente da cardiopatie, ovvero la percentuale di pazienti predetti come affetti da cardiopatie che lo erano veramente. Al contrario il valore maggiormente elevato è la precisione relativa ai pazienti non affetti da cardiopatie, ovvero la percentuale di pazienti predetti come non affetti da cardiopatie che non ne erano realmente affetti. É necessario sottolineare che la recall per i pazienti predetti correttamente sui totali risulta essere alta per entrambe le classi.

Il passo successivo consiste nel visualizzare i coefficienti a seguit dell'applicazione del modello.

REGRESSIONE LOGISTICA

Si passa allo studio della regressione logistica. I passaggi effettuati sono gli stessi visti per il Perceptron.

Dall'analisi si evince che il valore più basso risulta essee la precisione sui pazienti affetti realmente da cardiopatie(proprio come per il Perceptron). Il valore della f1_measure risulta nettamente migliore rispetto a quello rilevato per il Perceptron.

SUPPORT VECTOR MACHINE

Si passa alla valutazione del modello Support Vector Machine, anche chiamato SVM.

Come per i modelli precedenti la precisione dei pazienti non affetti realmente da cardiopatie è molto alta, al contrario della precisione dei pazienti realmente affetti da cardiopatie. Possiamo infine notare che il valore del f1_measure è migliore rispetto ad entrambi i precedenti modelli.

PARTE 4

In questa parte andremo ad effettuare un confronto tra i tre modelli prima analizzati, ovvero:

Il seguente metodo permette di confrontare i diversi modelli con intervallo di confidenza al 95%.

Si evince una somiglianza tra Support Vector Machine e Logistic Regression, come si evidenzia anche dalla misura del f1_measure effettuata in precedenza.

Dall'analisi precedente si vede che Support Vector Machine(f1_score=0.846) e Logistic Regression(f1_score=0.840) danno un risultato simile.

Come è noto la matrice di confusione è una tabella che descrive le prestazioni di un modello di classificazione su un insieme di dati di prova per i quali sono noti i valori reali. Detto questo passiamo a generare le matrice di confusione dei diversi modelli, per fare una valutazione più profonda.

Matrice di confusione del Perceptron.

Matrice di confusione del Logistic Regression.

Matrice di confidenza Support Vector Machine.

Adesso vengono calcolati gli intervalli di confidenza al 95% per ogni modello.

Dall'analisi degli intervalli di confidenza al 95% abbiamo conferma che il Support Vector Machine è il modello più accurato.

Possiamo confrontare le rette create utilizzando i tre differenti modelli:

Ricordiamo che, dalla misura dell'f1_measure, il modello migliore è il Support Vector Machine, seguito da Regressione Logistica e da Perceptron. Di seguito un grafico tridimensionale che rappresenta il piano ottenuto con SVM.

PARTE 5

Si effettua uno studio sui coefficienti del modello che ha restituito il miglior risultato: support vector machine.

A seguito della denormalizzazione, si nota, dallo studio dei coefficienti, che alcune variabili vengono azzerate. Quella più rilevante è il colesterolo, seguito da età e maxHR. Ci si aspetta quindi che un paziente con un colesterolo alto, un'età ed una frequenza cardiaca massima elevata sia affetto da cardiopatia.